﻿using System;
using System.Configuration;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SW_SoftBully.Controllers;
using SW_SoftBully.Models.ModuloServicios.Incidencia;
using System.Data.SqlClient;
using log4net;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

namespace SW_SoftBully.Models.ModuloServicios.Incidencia
{
    public class IncidenciaDAO
    {
        public string RegistrarIncidencia(IncidenciaBean incidencia)
        {
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();
                int tem_estado = 1;
                string commandString;

                if (incidencia.ID_Mantenible == 0)
                {
                    commandString = "INSERT INTO incidencia (Fecha_hora,Nombre,lugar,tipo_incidencia,id_edificio,estado,observacion) " +
                                           " VALUES (convert(datetime,'" + incidencia.Fecha + "',103), '" + incidencia.Nombre + "','" + incidencia.Lugar + "','" + incidencia.ID_TipoIncidencia + "','" + incidencia.ID_Edificio + "','" + tem_estado + "','" + incidencia.Observacion + "')";
 
                }
                else {
                    commandString = "INSERT INTO incidencia (Fecha_hora,Nombre,lugar,tipo_incidencia,id_edificio,id_mantenible,estado,observacion) " +
                                           " VALUES (convert(datetime,'" + incidencia.Fecha + "',103), '" + incidencia.Nombre + "','" + incidencia.Lugar + "','" + incidencia.ID_TipoIncidencia + "','" + incidencia.ID_Edificio + "','" + incidencia.ID_Mantenible + "','" + tem_estado + "','" + incidencia.Observacion + "')";
                
                }
                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                sqlCmd.ExecuteNonQuery();

                sqlCon.Close();

                incidencia.conexion = "Bien";
            }
            catch (Exception e)
            {
                String men = e.ToString();
                incidencia.conexion = men;
            }


            return incidencia.conexion;
        }

        public Boolean ExisteIncidencia(IncidenciaBean incidencia)
        {
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();
                //??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
                string commandString = "SELECT * FROM incidencia WHERE nombre = '" + incidencia.Nombre + "' AND estado = 1";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                if (dataReader.Read())
                {
                    IncidenciaBean Incidencia = new IncidenciaBean();

                    Incidencia.ID = (int)dataReader["id_incidencia"];
                    Incidencia.Nombre = (string)dataReader["Nombre"];

                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch
            {
                return false;
            }
        }

        public List<IncidenciaBean> ListarIncidencia(IncidenciaBean incidencia)
        {
            try
            {
                List<IncidenciaBean> listaincidencia = new List<IncidenciaBean>();
                string tem_fechafin = "12/12/2200";
                string tem_fechainicio = "12/12/1900";
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "select  a.*,b.Nombre from incidencia a inner join edificio b on a.id_Edificio=b.id_Edificio where a.estado=1";

                if (!string.IsNullOrEmpty(incidencia.Nombre))
                {
                    commandString += " AND nombre LIKE '%" + incidencia.Nombre + "%'";
                }

                if (incidencia.ID_Mantenible > 0)
                {
                    commandString += " AND Id_mantenible = " + incidencia.ID_Mantenible + "";
                }


                if (incidencia.ID_Edificio > 0)
                {
                    commandString += " AND Id_edificio = " + incidencia.ID_Edificio + "";
                }

                if (!string.IsNullOrEmpty(incidencia.ID_TipoIncidencia))
                {
                    commandString += " AND tipo_incidencia LIKE '%" + incidencia.ID_TipoIncidencia + "%'";
                }

                if (!string.IsNullOrEmpty(incidencia.Observacion))
                {
                    commandString += " AND observacion LIKE '%" + incidencia.Observacion + "%'";
                }

                if (!string.IsNullOrEmpty(incidencia.Lugar))
                {
                    commandString += " AND lugar LIKE '%" + incidencia.Lugar + "%'";
                }

                if ((!string.IsNullOrEmpty(incidencia.FechaInicio)) && (!string.IsNullOrEmpty(incidencia.FechaFin)))
                {
                    commandString += " AND fecha_hora BETWEEN convert(datetime,'" + incidencia.FechaInicio + "',103)"
                                   + " AND convert(datetime,'" + incidencia.FechaFin + "',103)";
                }
                else if (!string.IsNullOrEmpty(incidencia.FechaInicio)) {

                    commandString += " AND fecha_hora BETWEEN convert(datetime,'" + incidencia.FechaInicio + "',103)"
                                   + " AND convert(datetime,'" + tem_fechafin + "',103)";

                }
                else if (!string.IsNullOrEmpty(incidencia.FechaFin))
                {

                    commandString += " AND fecha_hora BETWEEN convert(datetime,'" + tem_fechainicio + "',103)"
                                   + " AND convert(datetime,'" + incidencia.FechaFin + "',103)";

                }

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read())
                {
                    IncidenciaBean Incidencia = new IncidenciaBean();
                    Incidencia.ID = Convert.ToInt32(dataReader[0]);
                    Incidencia.Fecha = String.Format("{0:dd/MM/yyyy}", dataReader[5]);
                    Incidencia.Nombre = Convert.ToString(dataReader[3]);
                    Incidencia.ID_TipoIncidencia = Convert.ToString(dataReader[1]);
                    Incidencia.Lugar = Convert.ToString(dataReader[4]);
                    Incidencia.Observacion = Convert.ToString(dataReader[7]);
                    if (Convert.IsDBNull(dataReader[6]))
                    {
                        
                        Incidencia.ID_Mantenible = 0;
                        Incidencia.Nombre_Mantenible = "Mantenible No Relacionado";
                    }
                    else { Incidencia.ID_Mantenible = Convert.ToInt32(dataReader[6]); }
                    
                    Incidencia.ID_Edificio = Convert.ToInt32(dataReader[2]);
                    Incidencia.Nombre_Edificio = Convert.ToString(dataReader[9]);

                    Incidencia.Estado = (int)dataReader[8];

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                    SqlConnection sqlCon2 = new SqlConnection(cadenaConfiguracion);

                    sqlCon2.Open();

                    string commandString2 = "SELECT a.nombre FROM mantenible a WHERE estado=1 and id_mantenible= " + Incidencia.ID_Mantenible ;

                    SqlCommand sqlCmd2 = new SqlCommand(commandString2, sqlCon2);

                    SqlDataReader dataReader2 = sqlCmd2.ExecuteReader();

                    while (dataReader2.Read())
                        {

                            Incidencia.Nombre_Mantenible = Convert.ToString(dataReader2[0]);
                            

                        }
                    dataReader2.Close();
                    sqlCon2.Close();
                    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                    
                    listaincidencia.Add(Incidencia);

                }
                dataReader.Close();
                sqlCon.Close();


                return listaincidencia;
            }
            catch (Exception e)
            {
                String men = e.ToString();
                incidencia.conexion = men;
                return null;
            }


        }

        public string ModificarIncidencia(IncidenciaBean incidencia)//////////////////////////////////////////////////////////////////////////////
        {
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();
                string commandString;
                
                int tem_estado = 1;

                if (incidencia.ID_Mantenible == 0)
                {

                    commandString =  "UPDATE incidencia SET " +
                                       "estado = '" + 0 + "'" +
                                       "WHERE estado=1 and Nombre = '" + incidencia.Nombre + "'";
                    commandString +="INSERT INTO incidencia (Fecha_hora,Nombre,lugar,tipo_incidencia,id_edificio,estado,observacion) " +
                                           " VALUES (convert(datetime,'" + incidencia.Fecha + "',103), '" + incidencia.Nombre + "','" + incidencia.Lugar + "','" + incidencia.ID_TipoIncidencia + "','" + incidencia.ID_Edificio + "','" + tem_estado + "','" + incidencia.Observacion + "')";
 
                }
                else {
                    commandString = "UPDATE incidencia SET " +
                                              "Fecha_Hora = '" + incidencia.Fecha + "' , " +
                                              "Nombre = '" + incidencia.Nombre + "' , " +
                                              "observacion = '" + incidencia.Observacion + "' , " +
                                              "id_mantenible = '" + incidencia.ID_Mantenible + "' , " +
                                              "lugar = '" + incidencia.Lugar + "' , " +
                                              "id_edificio = '" + incidencia.ID_Edificio + "' , " +
                                              "tipo_incidencia = '" + incidencia.ID_TipoIncidencia + "' , " +
                                              "estado = '" + tem_estado + "'" +
                                              "WHERE estado=1 and Nombre = '" + incidencia.Nombre + "'";
                
                }
                
                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                

                sqlCmd.ExecuteNonQuery();
                

                sqlCon.Close();

                incidencia.conexion = "Bien";

            }
            catch (Exception e)
            {
                String men = e.ToString();
                incidencia.conexion = men;
            }
            return incidencia.conexion;
        }

        public string EliminarIncidencia(IncidenciaBean incidencia)
        {
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                int elim_estado = 0;

                
                string commandString = "UPDATE incidencia SET " +
                                       "estado = '" + elim_estado + "'" +
                                       "WHERE Nombre = '" + incidencia.Nombre + "'";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                sqlCmd.ExecuteNonQuery();

                sqlCon.Close();

                incidencia.conexion = "Bien";
            }
            catch (Exception e)
            {
                String men = e.ToString();
                incidencia.conexion = men;
            }
            return incidencia.conexion;
        }

    }
}